package com.shao.service.Impl;


import com.shao.bean.*;
import com.shao.common.*;
import com.shao.dao.stuLoginDao;
import com.shao.service.stuService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;


/**
 * @author: com.song shao
 * @date: 2022/2/26
 * @time: 8:10
 * @version: 1.0
 */
@SuppressWarnings("all")
@Service
@Slf4j
@Transactional
public class stuServiceImpl implements stuService {

    @Autowired
    private stuLoginDao sld;

    /**
     * 学生用户的登录验证
     *
     * @param loginPeopel
     * @return
     */
    @Override
    public R loginVerify(loginBean loginPeopel) {

        String name = loginPeopel.getName();  // 账号

        String pwd = loginPeopel.getPwd();    // 密码

        if (!(name.length() > 0 && name.length() == 11 && pwd.length() > 6)) {
            return R.error("请检查你的账号是否是（11位）,密码不能小于6位！");
        }

        /*这里需要查询账号的状态*/
        student accountStatus = sld.findStas(name);

        int stu_state = accountStatus.getStu_state(); //用户的账号状态

        if (stu_state == 1) {
            return R.error("你的账号目前处于封禁状态，请联系管理员解封!");
        }
        String stu_pwd = accountStatus.getStu_pwd(); // 数据库中的密码
        if (!pwd.equals(stu_pwd)) {
            return R.error("你的账号或密码不正确(其实是你的密码!)");
        }
        return R.success(111);
    }

    /**
     * 查询学生的信息
     *
     * @param loginPeopel
     * @return
     */
    @Override
    public studentVo stuFindAll(loginBean loginPeopel) {

        studentVo studentVo = new studentVo();                              // 需要返回的对象
        String name = loginPeopel.getName();                                // 账号
        String pwd = loginPeopel.getPwd();                                  // 密码
        student accountStatus = sld.findStas(name);                         // 返回student表中的数据
        studentVo.setStu_nikename(accountStatus.getStu_nikename());         // 当前用户的昵称           vo
        String key = accountStatus.getStu_info();                           // 学生详情表的钥匙
        List<stu_info> siResu = sld.findStuData(key);                       // 拿到学生详情表中的数据
        int stu_class_id = siResu.get(0).getStu_class_id();                 // 拿学生班级表的密钥
        cls cResu = sld.findClass(stu_class_id);                            // 拿到当前学生所在的班级
        String class_name = cResu.getClass_name();                          // 拿到当前学生所在班级的名字
        studentVo.setClass_name(class_name);                                // 设置当前学生所在的班级     vo
        List<ScoreVo> scoreVos = new ArrayList<>();
        for (stu_info stu_info : siResu) {
            ScoreVo scoreVo = new ScoreVo();                                // 用来装各科的成绩          vo
            int stu_subject_id = stu_info.getStu_subject_id();              // 当前学科的名字Id
            int stu_score = stu_info.getStu_score();                        // 当前学科学生所得的分数
            subject subResu = sld.findStuSubData(stu_subject_id);           // 拿到当前科目的对象
            String subject_name = subResu.getSubject_name();                // 当前科目的名字
            int subject_total_points = subResu.getSubject_total_points();   // 当前科目的总分
            scoreVo.setStu_score(stu_score);                                // 需要设置的学生当前科目的成绩 v
            scoreVo.setSubject_name(subject_name);                          // 需要设置的科目的唯一名字    v
            scoreVo.setSubject_total_points(subject_total_points);          // 需要设置的当前科目的总分    v
            scoreVos.add(scoreVo);                                          // 把成绩表的详情写到返回的对象中
        }
        teacher tea = sld.selectTeacher(stu_class_id);                    // 查询学生的班主任
        String tea_nikename = tea.getTea_nikename();                        // 当前学生的班主任
        studentVo.setTea_class(tea_nikename);                               // 设置到返回               vo
        studentVo.setStu_score(scoreVos);
        return studentVo;
    }

    /**
     * 教师查询学生
     *
     * @return
     */
    @Override
    public List<stuIfo> teacherFindStudent() {
        List<stuIfo> objects = new ArrayList<>();
        List<student> stuRes = sld.findStu();
        if (stuRes.size() == 0) {
            return null;
        }
        for (student stuRe : stuRes) {
            stuIfo stuIfo = new stuIfo();
            BeanUtils.copyProperties(stuRe, stuIfo);
            objects.add(stuIfo);
        }
        return objects;
    }

    @Override
    public boolean updateStuInfo(updateStuInfoVo usi) {
        int stu_score = usi.getStu_score();             //学生当前科目成绩
        String subject_name = usi.getSubject_name();    // 学科名字
        int subject_total_points = usi.getSubject_total_points(); // 学科的总分
        String stuUsername = usi.getStuUsername();           //用户账号
        subject bySubjectDate = sld.findBySubjectDate(subject_name); // 拿到当前科目的对象
        int subject_id = bySubjectDate.getSubject_id(); // 当前科目的Id
        int i = sld.updateSubjectByName(subject_name, subject_total_points);
        if (!(i > 0)) {  //修改学科的名字和总分(名字不能修改)
            return false;
        }
        // 修改个人成绩
        try {
            int result = sld.updataStudentScore(stu_score, subject_id);
            // 到了这里说明学科的总成绩修改完成
            return true;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }
    }

}
